package cn.gary.oaserver.config.utils;

import cn.gary.oaserver.entity.TMenu;
import cn.gary.oaserver.service.ITMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: 邓必宏
 * @title:
 * @Demo:
 * @DateTime: 2024/4/1
 */
@Component
public class MenuForUtil {

    @Autowired
    ITMenuService menuService;


    public List<TMenu> getMenuByRoleId(Integer roleId) {
        //获取所有的菜单列表
        List<TMenu> AllMenuList = menuService.getMenusByRoleId ( roleId );
        //一级菜单
        List<TMenu> menus = new ArrayList<> ( );
        //遍历所有菜单
        AllMenuList.forEach ( menu -> {
            //一级菜单的条件
            if (menu.getMenuLevel ( ) == 1) {
                //菜单里面此时只有一级菜单所以要设置他的子菜单（
                // 通过getChildren（参数1：菜单列表（因为子菜单也在菜单列表中），参数2：为此菜单的id标识）
                // ）
                menu.setChildren ( getChildren ( AllMenuList, menu.getId ( ) ) );
                //把符合条件的菜单加入到一级菜单
                menus.add ( menu );
            }
        } );
        return menus;
    }

    private List<TMenu> getChildren(List<TMenu> allMenuList, Integer parentId) {
        //调用的地方需要返回一个子菜单列表所以先定义好
        List<TMenu> children = new ArrayList<> ( );
        //遍历所有菜单
        allMenuList.forEach ( menu -> {
            //成为子级菜单的条件
            if (menu.getParentId ( ) != null && menu.getParentId ( ).intValue ( ) == parentId.intValue ( )) {
                //子菜单可能还有‘子菜单集合’所以要设置子菜单的子菜单列表
                menu.setChildren ( getChildren ( allMenuList, menu.getId ( ) ) );
                //将满足条件的菜单放入到要返回的菜单列表中
                children.add ( menu );
            }
        } );
        return children;
    }

}
